package com.proback.controller;

import com.proback.dto.BookDataAddRequest;
import com.proback.dto.BookDataUpdateRequest;
import com.proback.entity.BookData;
import com.proback.service.BookDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.Year;
import java.time.YearMonth;
import java.util.List;

/**
 * 记账数据接口控制器，提供添加、查询、修改和删除等功能。
 */
@RestController
@RequestMapping("/api/book")
public class BookDataController {

    @Autowired
    private BookDataService bookService;

    /**
     * 添加一条记账数据
     *
     * @param request 包含记账信息（类型、金额、类别、备注等）
     * @return 添加成功提示
     */
    @PostMapping("/add")
    public String add(@RequestBody BookDataAddRequest request) {
        bookService.add(request);
        return "添加成功";
    }

    /**
     * 查询某个用户的全部记账记录
     *
     * @param userId 用户ID
     * @return 该用户的记账数据列表
     */
    @GetMapping("/list")
    public List<BookData> list(@RequestParam Integer userId) {
        return bookService.listByUserId(userId);
    }

    /**
     * 修改一条记账数据（需包含记录ID）
     *
     * @param request 包含要修改的记账信息
     * @return 修改成功提示
     */
    @PutMapping("/update")
    public String update(@RequestBody BookDataUpdateRequest request) {
        bookService.update(request);
        return "修改成功";
    }

    /**
     * 根据ID删除一条记账记录
     *
     * @param id 记账记录ID
     * @return 删除成功提示
     */
    @DeleteMapping("/delete/{id}")
    public String delete(@PathVariable Integer id) {
        bookService.delete(id);
        return "删除成功";
    }

    /**
     * 查询某个用户在指定年份的记账记录
     *
     * @param userId 用户ID
     * @param year 年份（格式为 yyyy）
     * @return 符合年份的记账记录列表
     */
    @GetMapping("/by-year")
    public List<BookData> listByYear(@RequestParam Integer userId, @RequestParam int year) {
        return bookService.listByUserIdAndYear(userId, Year.of(year));
    }

    /**
     * 查询某个用户在指定年月的记账记录
     *
     * @param userId 用户ID
     * @param yearMonth 年月字符串（格式为 yyyy-MM）
     * @return 符合年月的记账记录列表
     */
    @GetMapping("/by-year-month")
    public List<BookData> listByYearMonth(@RequestParam Integer userId, @RequestParam String yearMonth) {
        return bookService.listByUserIdAndYearMonth(userId, YearMonth.parse(yearMonth));
    }
}
